package com.zp.self.module.level_4_算法练习.数学.位运算;

/**
 * @author By ZengPeng
 */
public class 力扣_342_4的幂 {
    //测试
    public static void main(String[] args) {

        System.out.println(new 力扣_342_4的幂().isPowerOfFour(1));
        System.out.println(new 力扣_342_4的幂().isPowerOfFour(4));
        System.out.println(new 力扣_342_4的幂().isPowerOfFour(8));
        System.out.println(new 力扣_342_4的幂().isPowerOfFour(12));
    }

    /**
     * 题目：给定一个整数，写一个函数来判断它是否是 4 的幂次方。如果是，返回 true ；否则，返回 false 。
     * 整数 n 是 4 的幂次方需满足：存在整数 x 使得 n == 4x
     *
     *
     *
     * 分析：
     *      1. n>=4,每次取余数，不为0 返回false
     *      2.每次位移2位 判断是否为1
     *      大神：0x5 = 0101b可以用来校验奇数位上的1。  num & 0x55555555
     * 边界值 & 注意点：
     *      1.
     **/
    public boolean isPowerOfFour(int n) {
        int x = 4;
        while (x > 0 && x < n) {
            x <<= 2;
        }
        return n == 1 || n == x;
    }
}
